// #include "rtc_board.h"
// #include "user_sleep.h"
#include "irq_contorl.h"
#include "user_system.h"
// #include "bluetooth_app.h"

// /**
//  * @brief 应用层任务处理
//  *
//  * @param TaskId - 任务句柄
//  * @param Events - 事件类型
//  */
// static uint16_t HardwarwProcessEvent(uint8_t TaskId, uint16_t Events);

// uint8_t HalEventTask = 0;
// __attribute__((aligned(4))) uint32_t MEM_BUF[BLE_MEMHEAP_SIZE / 4] = {0};

// #if (defined(BLE_MAC)) && (BLE_MAC == TRUE)
// uint8_t MacAddr[6] = {0x84, 0xC2, 0xE4, 0x03, 0x02, 0x02};
// #endif

// #if (defined(BLE_SNV)) && (BLE_SNV == TRUE)
// uint32_t Lib_Read_Flash(uint32_t AddrOffset, uint32_t SizeOut, uint32_t *pDataOut)
// {
//   EEPROM_READ(AddrOffset, pDataOut, SizeOut * 4);
//   return 0;
// }

// uint32_t LibraryWriteFlash(uint32_t AddrOffset, uint32_t SizeIn, uint32_t *pDataIn)
// {
//   EEPROM_ERASE(AddrOffset, SizeIn * 4);
//   EEPROM_WRITE(AddrOffset, pDataIn, SizeIn * 4);

//   return 0;
// }
// #endif

// uint16_t HalGetInterTempValue(void)
// {
//   uint16_t AdcData = 0;
//   uint8_t AdcTmpSensor = 0, AdcChannel = 0, AdcConfig = 0, TKeyConfig = 0;

//   TKeyConfig = R8_TKEY_CFG;
//   AdcTmpSensor = R8_TEM_SENSOR;
//   AdcChannel = R8_ADC_CHANNEL;
//   AdcConfig = R8_ADC_CFG;
//   ADC_InterTSSampInit();
//   R8_ADC_CONVERT |= RB_ADC_START;
//   while (R8_ADC_CONVERT & RB_ADC_START)
//     ;

//   AdcData = R16_ADC_DATA;
//   R8_TEM_SENSOR = AdcTmpSensor;
//   R8_ADC_CHANNEL = AdcChannel;
//   R8_ADC_CFG = AdcConfig;
//   R8_TKEY_CFG = TKeyConfig;

//   return AdcData;
// }

// void HardwareInit(void)
// {
// //   RtcHardwareInitialization();
// //   SystemSleepInit();
// //   // TimerConfiguration();

// //   HalEventTask = TMOS_ProcessEventRegister(HardwarwProcessEvent);
// // #if (defined BLE_CALIBRATION_ENABLE) && (BLE_CALIBRATION_ENABLE == TRUE)
// //   tmos_start_task(HalEventTask, HAL_REG_INIT_EVENT, MS1_TO_SYSTEM_TIME(BLE_CALIBRATION_PERIOD));
// // #endif
// }

// void BluetoothLibraryInit(void)
// {
// //   uint8_t i = 0;
// //   bleConfig_t BluetoothConfig = {0};

// //   PRINT("[system]: power on.\r\n");
// //   if (tmos_memcmp(VER_LIB, VER_FILE, strlen(VER_FILE)) == FALSE)
// //   {
// //     PRINT("[system]: head file error.\r\n");
// //     while (1)
// //       ;
// //   }

// //   PRINT("[system]: firmware version number: %s.\r\n", VER_LIB);

// //   SysTick_Config(SysTick_LOAD_RELOAD_Msk);
// //   PFIC_DisableIRQ(SysTick_IRQn);

// //   tmos_memset(&BluetoothConfig, 0, sizeof(bleConfig_t));
// //   BluetoothConfig.MEMAddr = (uint32_t)MEM_BUF;
// //   BluetoothConfig.MEMLen = (uint32_t)BLE_MEMHEAP_SIZE;
// //   BluetoothConfig.BufMaxLen = (uint32_t)BLE_BUFF_MAX_LEN;
// //   BluetoothConfig.BufNumber = (uint32_t)BLE_BUFF_NUM;
// //   BluetoothConfig.TxNumEvent = (uint32_t)BLE_TX_NUM_EVENT;
// //   BluetoothConfig.TxPower = (uint32_t)BLE_TX_POWER;

// // #if (defined(BLE_SNV)) && (BLE_SNV == TRUE)
// //   if ((BLE_SNV_ADDR + BLE_SNV_BLOCK * BLE_SNV_NUM) > (0x78000 - FLASH_ROM_MAX_SIZE))
// //   {
// //     PRINT("[system]: snv config error.\r\n");
// //     while (1)
// //       ;
// //   }

// //   BluetoothConfig.SNVAddr = (uint32_t)BLE_SNV_ADDR;
// //   BluetoothConfig.SNVBlock = (uint32_t)BLE_SNV_BLOCK;
// //   BluetoothConfig.SNVNum = (uint32_t)BLE_SNV_NUM;
// //   BluetoothConfig.readFlashCB = Lib_Read_Flash;
// //   BluetoothConfig.writeFlashCB = LibraryWriteFlash;
// // #endif

// // #if (CLK_OSC32K)
// //   BluetoothConfig.SelRTCClock = (uint32_t)CLK_OSC32K;
// //   BluetoothConfig.SelRTCClock |= 0x80;
// // #endif
// //   BluetoothConfig.ConnectNumber = (PERIPHERAL_MAX_CONNECTION & 3) | (CENTRAL_MAX_CONNECTION << 2);
// //   BluetoothConfig.srandCB = SYS_GetSysTickCnt;
// // #if (defined TEM_SAMPLE) && (TEM_SAMPLE == TRUE)
// //   BluetoothConfig.tsCB = HalGetInterTempValue;
// // #if (CLK_OSC32K)
// //   BluetoothConfig.rcCB = LibraryCalibrationLSI;
// // #endif
// // #endif

// // #if (defined(HAL_SLEEP)) && (HAL_SLEEP == TRUE)
// //   BluetoothConfig.WakeUpTime = WAKE_UP_RTC_MAX_TIME;
// //   BluetoothConfig.sleepCB = SystemIntoLowPower;
// // #endif

// // #if (defined(BLE_MAC)) && (BLE_MAC == TRUE)
// //   for (i = 0; i < 6; i++)
// //   {
// //     BluetoothConfig.MacAddr[i] = MacAddr[5 - i];
// //   }
// // #else
// //   {
// //     uint8_t MacAddr[6] = {0};
// //     GetMACAddress(MacAddr);
// //     for (i = 0; i < 6; i++)
// //     {
// //       BluetoothConfig.MacAddr[i] = MacAddr[i];
// //     }
// //   }
// // #endif

// //   if ((!BluetoothConfig.MEMAddr) || (BluetoothConfig.MEMLen < 4 * 1024))
// //   {
// //     PRINT("[system]: not enough memory space.\r\n");
// //     while (1)
// //       ;
// //   }

// //   i = BLE_LibInit(&BluetoothConfig);
// //   if (i)
// //   {
// //     PRINT("[system]: library init error code: %x.\r\n", i);
// //     while (1)
// //       ;
// //   }
// }

// static uint16_t HardwarwProcessEvent(uint8_t TaskId, uint16_t Events)
// {
// //   uint8_t *pMessage = NULL;

// //   if (Events & SYS_EVENT_MSG)
// //   {
// //     pMessage = tmos_msg_receive(TaskId);
// //     if (pMessage)
// //     {
// //       tmos_msg_deallocate(pMessage);
// //     }

// //     return Events ^ SYS_EVENT_MSG;
// //   }

// //   if (Events & HAL_REG_INIT_EVENT)
// //   {
// // #if (defined BLE_CALIBRATION_ENABLE) && (BLE_CALIBRATION_ENABLE == TRUE)
// //     BLE_RegInit();

// // #if (CLK_OSC32K)
// //     LibraryCalibrationLSI();
// // #endif

// //     tmos_start_task(TaskId, HAL_REG_INIT_EVENT, MS1_TO_SYSTEM_TIME(BLE_CALIBRATION_PERIOD));
// // #endif

// //     return Events ^ HAL_REG_INIT_EVENT;
// //   }

// //   return 0;
// }

void GetLastResetStatus(void)
{
  uint8_t ResetSta = 0;

  ResetSta = SYS_GetLastResetSta() & 0x07;
  switch (ResetSta)
  {
  case 0:
    PRINT("[error]: software reset = %04X \r\n", ResetSta);
    break;

  case 1:
    PRINT("[error]: pwer-on reset RPOR = %04X \r\n", ResetSta);
    break;

  case 2:
    PRINT("[error]: watchdog timeout rese WTR = %04X \r\n", ResetSta);
    break;

  case 3:
    PRINT("[error]: external manual reset MR = %04X \r\n", ResetSta);
    break;

  case 5:
    PRINT("[error]: reset when waking up from power-down mode GRWSM = %04X \r\n", ResetSta);
    break;

  default:
    PRINT("[error]: wake-up reset LRW = %04X \r\n", ResetSta);
    break;
  }
}

__INTERRUPT
__HIGH_CODE
void GPIOA_IRQHandler(void)
{
  TraversalIrqTable();
}

__INTERRUPT
__HIGH_CODE
void GPIOB_IRQHandler(void)
{
  TraversalIrqTable();
}
